﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Hotel.NhanVien
{
    public partial class QuanLiLuong : Form
    {
        private SqlConnection conn = new SqlConnection("Server=(local);DataBase=Hotel;Integrated Security=SSPI");
        
        double ngaycuoithang = DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month);
        // lấy ngày cuối cùng của 1 tháng (06/30/2012)
        // (SELECT     DATEADD(d, - 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) AS NgayCuoiThang)
        double songaylam;
        double tongLuong;
        double sotiennghilam;
        double sotientamung;
        public DateTime begin;
        public DateTime end;
        int maNhanVien = 0;
        int maLuong = 0;
        public QuanLiLuong()
        {
            InitializeComponent();
        }

        private void QuanLiLuong_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'hotelDataSet.Luong' table. You can move, or remove it, as needed.
            this.luongNhanVienTableAdapter.Fill(this.hotelDataSet.LuongNhanVien);
            // TODO: This line of code loads data into the 'hotelDataSet_BaoCaoLuong.Luong' table. You can move, or remove it, as needed.
           
        }

        private void LayMaNhanVien()
        {
            SqlDataReader dr=null;
            string sql = "select MaNV from NhanVien where (TenNV=N'" + tboxTenNV.Text + "' ) and (NhanVien.DaXoa=0)";
            SqlCommand cmd = null;
            try
            {
                conn.Open();
                cmd = new SqlCommand(sql, conn);
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    maNhanVien = Convert.ToInt32(dr[0].ToString());
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                if (dr != null)
                {
                    dr.Close();
                }
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        private void LayMaLuong()
        {
            LayMaNhanVien();
            SqlDataReader dr = null;
            string sql = "select MaLuong from Luong where (MaNV=N'" + maNhanVien + "' ) ";
            SqlCommand cmd = null;
            try
            {
                conn.Open();
                cmd = new SqlCommand(sql, conn);
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    maLuong = Convert.ToInt32(dr[0].ToString());
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                if (dr != null)
                {
                    dr.Close();
                }
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        private void ThemBangLuong()
        {
            SqlCommand cmd1=null;
            try
            {
                conn.Open();
                cmd1 = new SqlCommand("insert into Luong(MaNV,MucLuong,DaXoa) values ('" + maNhanVien + "','" + Convert.ToDouble(tboxMucLuong.Text) + "',0)", conn);
                cmd1.Connection = conn;
                cmd1.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            { 
                if(conn!=null)
                {
                    conn.Close();
                }
            }
          
        }

        private void btnXinNghi_Click(object sender, EventArgs e)
        {
            SqlCommand cmd1 = null;
            // MessageBox.Show(tboxMaNV.Text);
            if (tboxSoNgayNghi.Text == "")
            {
                MessageBox.Show("Chưa nhập số ngày nghỉ!");
            }
            else if (Convert.ToInt32(tboxSoNgayNghi.Text) >= DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month))
            {
                MessageBox.Show("Số ngày nghỉ không được lớn hơn số ngày trong tháng!");
            }
            else
            {
                try
                {
                    conn.Open();
                    if (MessageBox.Show("Xác nhận xin nghỉ ?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        cmd1 = new SqlCommand("UPDATE Luong SET SoNgayNghi='" + Convert.ToInt32(tboxSoNgayNghi.Text) + "',LyDoNghi= N'" + tboxLyDoNghi.Text + "' WHERE MaNV='" + maNhanVien + "' and Luong.DaXoa=0 ");
                        cmd1.Connection = conn;
                        cmd1.ExecuteNonQuery();
                    }
                    //MessageBox.Show("Xin nghỉ thành công!");

                }
                catch
                {
                    MessageBox.Show("Xin nghỉ không thành công!");
                }
                finally
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                }
            }
            QuanLiLuong_Load(sender, e);
        }

        private void btnUngLuong_Click(object sender, EventArgs e)
        {
            SqlCommand cmd1 = null;
            // MessageBox.Show(tboxMaNV.Text);
            if (tboxTienUngTruoc.Text == "")
            {
                MessageBox.Show("Chưa nhập số tiền ứng trước!");
            }
            else if (Convert.ToDouble(tboxTienUngTruoc.Text) >= (Convert.ToDouble(tboxMucLuong.Text)))
            {
                MessageBox.Show("Số tiền ứng trước không được vượt quá mức lương!");
            }

            else if (dateTimePickerNgayUng.Value.Month > DateTime.Now.Month)
            {
                MessageBox.Show("Chỉ ứng lương trong tháng này!");
            }
            else
            {
                if (dateTimePickerNgayUng.Value.Month <= DateTime.Now.Month)
                {
                    try
                    {
                        conn.Open();
                        if (MessageBox.Show("Xác nhận ứng trước lương ?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            cmd1 = new SqlCommand("UPDATE Luong SET TienUngTruoc='" + Convert.ToInt32(tboxTienUngTruoc.Text) + "',LyDoUng= N'" + tboxLyDoUng.Text + "',NgayUng='" + dateTimePickerNgayUng.Value + "' WHERE MaNV='" + maNhanVien + "' and Luong.DaXoa=0 ");
                            cmd1.Connection = conn;
                            cmd1.ExecuteNonQuery();
                        }
                       // MessageBox.Show("Ứng lương thành công!");

                    }
                    catch
                    {
                        MessageBox.Show("Ứng lương không thành công!");
                    }
                    finally
                    {
                        if (conn != null)
                        {
                            conn.Close();
                        }
                    }
                }
            }
            QuanLiLuong_Load(sender, e);
        }

        private void btnTinhLuong_Click(object sender, EventArgs e)
        {
            LayMaLuong();
            MessageBox.Show(maLuong.ToString());
            double hesoluong = Convert.ToDouble(tboxMucLuong.Text) / 30;
            if (tboxSoNgayNghi.Text == "")
            {
                sotiennghilam = 0;
            }
            else
            {
                sotiennghilam = Convert.ToDouble(tboxSoNgayNghi.Text) * hesoluong;
            }

            if (tboxTienUngTruoc.Text == "")
            {
                sotientamung = 0;
            }
            else
            {
                sotientamung = Convert.ToDouble(tboxTienUngTruoc.Text);
            }


            //ngaycuoithang=DateTime.DaysInMonth(DateTime.Today.Year,DateTime.Today.Month);
            // MessageBox.Show(Convert.ToString(ngaycuoithang));
            double ngayphatluong = Convert.ToDouble(dateTimePickerNgayPhatLuong.Value.Day);
            if (dateTimePickerNgayPhatLuong.Value.Month == DateTime.Now.Month)
            {
                if (dateTimePickerNgayPhatLuong.Value.Day < ngaycuoithang)
                {
                    songaylam = ngayphatluong;
                    //MessageBox.Show(Convert.ToString(songaylam));
                    tongLuong = Convert.ToInt32(hesoluong * songaylam - (sotiennghilam + sotientamung));
                    // MessageBox.Show(Convert.ToString(tongLuong));
                    tboxTongTien.Text = Convert.ToString(tongLuong);
                }
            }
            else
                if (dateTimePickerNgayPhatLuong.Value.Month > DateTime.Now.Month)
                {
                    if (Convert.ToDouble(dateTimePickerNgayPhatLuong.Value.Month) - Convert.ToDouble(DateTime.Now.Month) == 1)
                    {
                        songaylam = ngayphatluong;
                        //  MessageBox.Show(Convert.ToString(songaylam));
                        tongLuong = Convert.ToInt32((songaylam * hesoluong + Convert.ToDouble(tboxMucLuong.Text)) - (sotiennghilam + sotientamung));

                        //  MessageBox.Show(Convert.ToString(tongLuong));
                        tboxTongTien.Text = Convert.ToString(tongLuong);
                    }
                    if (Convert.ToDouble(dateTimePickerNgayPhatLuong.Value.Month) - Convert.ToDouble(DateTime.Now.Month) > 1)
                    {
                        MessageBox.Show("Việc tính lương nên thực hiện từng tháng một, tối đa không quá hai tháng!");
                    }
                }
                else if (dateTimePickerNgayPhatLuong.Value.Month < DateTime.Now.Month)
                {
                    MessageBox.Show("Tháng vừa chọn đã được tính lương!");

                }
            // đưa tổng lương vào bảng lương của nhân viên
            SqlCommand cmd = null;
            try
            {
                conn.Open();
                if (MessageBox.Show("Tính lương của nhân viên '"+tboxTenNV.Text+"' trong tháng này ?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    cmd = new SqlCommand("update Luong set TongLuong='" + Convert.ToInt32(tongLuong) + "', NgayPhatLuong='" + dateTimePickerNgayPhatLuong.Value + "',Luong.DaXoa=1 where MaLuong='" + maLuong + "'", conn);
                    cmd.ExecuteNonQuery();
                }
                MessageBox.Show("Đã tính lương thành công!");
            }
            catch (Exception obje)
            {
                MessageBox.Show(obje.Message);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            // Chen mot record moi vao bang luong voi truong DaXoa=0

            ThemBangLuong();
            QuanLiLuong_Load(sender, e);
        }


        private void btnLuongThangTatCaNhanVien_Click(object sender, EventArgs e)
        {
                ReportLuongtatcanhanvien report = new ReportLuongtatcanhanvien(this, begin, end);
                report.Show();
            
        }
        private void btnThayDoiLuong_Click(object sender, EventArgs e)
        {
            tboxMucLuong.ReadOnly = false;
        }

        private void btnConfirm_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = null;

            try
            {
                conn.Open();
                if (MessageBox.Show("Xác nhận thay đổi mức lương ?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    cmd = new SqlCommand("update Luong set MucLuong='" + tboxMucLuong.Text + "' where MaNV='" + maNhanVien + "' and Luong.DaXoa=0", conn);
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception evt)
            {
                MessageBox.Show(evt.Message);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }
            tboxMucLuong.ReadOnly = true;
            QuanLiLuong_Load(sender, e);
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            string sql = "SELECT     dbo.NhanVien.TenNV, dbo.Luong.MucLuong, dbo.Luong.SoNgayNghi, dbo.Luong.LyDoNghi, dbo.Luong.TienUngTruoc, dbo.Luong.NgayUng, dbo.Luong.LyDoUng, "
                                    + "dbo.Luong.NgayPhatLuong, dbo.Luong.TongLuong "
                         + " FROM         dbo.Luong INNER JOIN dbo.NhanVien ON dbo.Luong.MaNV = dbo.NhanVien.MaNV "
                         + " WHERE     (dbo.NhanVien.TenNV = N'"+tboxTimKiem.Text+"') "  ;
            SqlDataAdapter da;
            DataTable tb;
            try
            {
                conn.Open();
                da = new SqlDataAdapter(sql, conn);
                tb = new DataTable();
                da.Fill(tb);
                dtgvLuong.DataSource = tb;
            }
            catch (Exception ev)
            {

                throw ev;
            }
            finally
            {
                conn.Close();
            }

        }
        private void dtgvLuong_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int i = e.RowIndex;
            if (i > -1)
            {
                tboxTenNV.Text = dtgvLuong.Rows[i].Cells[0].Value.ToString();
                tboxMucLuong.Text = dtgvLuong.Rows[i].Cells[1].Value.ToString();
                tboxSoNgayNghi.Text = dtgvLuong.Rows[i].Cells[2].Value.ToString();
                tboxLyDoNghi.Text = dtgvLuong.Rows[i].Cells[3].Value.ToString();
                tboxTienUngTruoc.Text = dtgvLuong.Rows[i].Cells[4].Value.ToString();
                dateTimePickerNgayUng.Text = dtgvLuong.Rows[i].Cells[5].Value.ToString();
                tboxLyDoUng.Text = dtgvLuong.Rows[i].Cells[6].Value.ToString();
                dateTimePickerNgayPhatLuong.Text = dtgvLuong.Rows[i].Cells[7].Value.ToString();
                tboxTongTien.Text =(dtgvLuong.Rows[i].Cells[8].Value.ToString());
            }
            LayMaNhanVien();
        }

        private void tboxTienUngTruoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !(e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == 8);
        }
        
        private void tboxSoNgayNghi_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !(e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == 8);
        }

        private void tboxMucLuong_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !(e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == 8);
        }

        private void dtpNgaybatdau1_ValueChanged(object sender, EventArgs e)
        {
            begin = dtpNgaybatdau1.Value;
        }

        private void dtpNgayketthuc_ValueChanged(object sender, EventArgs e)
        {
            end = dtpNgayketthuc.Value;
        }

        

        
       

    }
}


